| @@ -146,6 +146,11 @@ ENABLE_SECOND_PRECISION_SCHEDULE=false | ||
| 146 | 146 | # at the expense of time accuracy. | 
| 147 | 147 | #SCHEDULER_FREQUENCY=0.3 | 
| 148 | 148 |  | 
| 149 | +# Specify whether events ages should be checked daily or frequently. | |
| 150 | +# A value of "normal" checks each day at midnight, while a value of | |
| 151 | +# "frequent" adds an option to keep events for 90 seconds and checks every 3 minutes | |
| 152 | +SCHEDULER_EXPIRATION_CHECK=normal | |
| 153 | + | |
| 149 | 154 | # Use Graphviz for generating diagrams instead of using Google Chart | 
| 150 | 155 | # Tools. Specify a dot(1) command path built with SVG support | 
| 151 | 156 | # enabled. | 
| @@ -22,6 +22,9 @@ class Agent < ActiveRecord::Base | ||
| 22 | 22 | midnight 1am 2am 3am 4am 5am 6am 7am 8am 9am 10am 11am noon 1pm 2pm 3pm 4pm 5pm 6pm 7pm 8pm 9pm 10pm 11pm never] | 
| 23 | 23 |  | 
| 24 | 24 |    EVENT_RETENTION_SCHEDULES = [["Forever", 0], ["1 day", 1], *([2, 3, 4, 5, 7, 14, 21, 30, 45, 90, 180, 365].map {|n| ["#{n} days", n] })] | 
| 25 | + if ENV['SCHEDULER_EXPIRATION_CHECK'] == 'frequent' | |
| 26 | + EVENT_RETENTION_SCHEDULES.push(["A minute", 60]) | |
| 27 | + end | |
| 25 | 28 |  | 
| 26 | 29 | attr_accessible :options, :memory, :name, :type, :schedule, :controller_ids, :control_target_ids, :disabled, :source_ids, :scenario_ids, :keep_events_for, :propagate_immediately, :drop_pending_events | 
| 27 | 30 |  | 
| @@ -129,12 +132,18 @@ class Agent < ActiveRecord::Base | ||
| 129 | 132 | end | 
| 130 | 133 |  | 
| 131 | 134 | def new_event_expiration_date | 
| 132 | - keep_events_for > 0 ? keep_events_for.days.from_now : nil | |
| 135 | + if keep_events_for == 60 | |
| 136 | + 90.seconds.from_now | |
| 137 | + else | |
| 138 | + keep_events_for > 0 ? keep_events_for.days.from_now : nil | |
| 139 | + end | |
| 133 | 140 | end | 
| 134 | 141 |  | 
| 135 | 142 | def update_event_expirations! | 
| 136 | 143 | if keep_events_for == 0 | 
| 137 | 144 | events.update_all :expires_at => nil | 
| 145 | + elsif keep_events_for == 60 | |
| 146 | +      events.update_all "expires_at = " + rdbms_date_add("created_at", "SECOND", 90) | |
| 138 | 147 | else | 
| 139 | 148 |        events.update_all "expires_at = " + rdbms_date_add("created_at", "DAY", keep_events_for.to_i) | 
| 140 | 149 | end | 
| @@ -114,8 +114,14 @@ class HuginnScheduler | ||
| 114 | 114 | end | 
| 115 | 115 |  | 
| 116 | 116 | # Schedule event cleanup. | 
| 117 | - @rufus_scheduler.cron "0 0 * * * " + tzinfo_friendly_timezone do | |
| 118 | - cleanup_expired_events! | |
| 117 | + if ENV['SCHEDULER_EXPIRATION_CHECK'] == 'normal' | |
| 118 | + @rufus_scheduler.cron "0 0 * * * " + tzinfo_friendly_timezone do | |
| 119 | + cleanup_expired_events! | |
| 120 | + end | |
| 121 | + elsif ENV['SCHEDULER_EXPIRATION_CHECK'] == 'frequent' | |
| 122 | + @rufus_scheduler.every '3m' do | |
| 123 | + cleanup_expired_events! | |
| 124 | + end | |
| 119 | 125 | end | 
| 120 | 126 |  | 
| 121 | 127 | # Schedule failed job cleanup. |